--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
meshchatx/src/frontend/js/Utils.js e0f1f99cd1c208c5008a936230c38e448dddd45d (e0f1f99c) Text, 10.81 KB
Tff7b72import Tb4b4b4{ Te6edf3formatDate Tb4b4b4} Tff7b72from Ta5d6ff"../libs/datetime.js"Tb4b4b4;
Tff7b72class Te6edf3Utils Tb4b4b4{
Tff7b72static Te6edf3formatDestinationHashTb4b4b4(Te6edf3destinationHashHexTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3destinationHashHex Tff7b72== Tff7b72null Tff7b72|| Te6edf3destinationHashHex Tff7b72=== Ta5d6ff""Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"<>"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3hex Tff7b72= Tffa657StringTb4b4b4(Te6edf3destinationHashHexTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3bytesPerSide Tff7b72= T79c0ff4Tb4b4b4;
Tff7b72const Te6edf3leftSide Tff7b72= Te6edf3hexTb4b4b4.Te6edf3substringTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3bytesPerSide Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rightSide Tff7b72= Te6edf3hexTb4b4b4.Te6edf3substringTb4b4b4(Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3hexTb4b4b4.Te6edf3length Tff7b72- Te6edf3bytesPerSide Tff7b72* T79c0ff2Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Ta5d6ff<Tffd700${Te6edf3leftSideTffd700}Ta5d6ff...Tffd700${Te6edf3rightSideTffd700}Ta5d6ff>Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatBytesTb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3bytes Tff7b72|| Te6edf3bytes Tff7b72<= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"0 Bytes"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3k Tff7b72= T79c0ff1024Tb4b4b4;
Tff7b72const Te6edf3decimals Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3sizes Tff7b72= Tb4b4b4[Ta5d6ff"Bytes"Tb4b4b4, Ta5d6ff"KB"Tb4b4b4, Ta5d6ff"MB"Tb4b4b4, Ta5d6ff"GB"Tb4b4b4, Ta5d6ff"TB"Tb4b4b4, Ta5d6ff"PB"Tb4b4b4, Ta5d6ff"EB"Tb4b4b4, Ta5d6ff"ZB"Tb4b4b4, Ta5d6ff"YB"Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3i Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3bytesTb4b4b4) Tff7b72/ Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657parseFloatTb4b4b4(Tb4b4b4(Te6edf3bytes Tff7b72/ Tffa657MathTb4b4b4.Te6edf3powTb4b4b4(Te6edf3kTb4b4b4, Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(Te6edf3decimalsTb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff" " Tff7b72+ Te6edf3sizesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatNumberTb4b4b4(Te6edf3numTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3num Tff7b72=== T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"0"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3num Tff7b72=== Tff7b72null Tff7b72|| Te6edf3num Tff7b72=== Tff7b72undefinedTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"0"Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3numTb4b4b4.Te6edf3toLocaleStringTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3parseSecondsTb4b4b4(Te6edf3secondsToFormatTb4b4b4) Tb4b4b4{
Te6edf3secondsToFormat Tff7b72= Tffa657NumberTb4b4b4(Te6edf3secondsToFormatTb4b4b4)Tb4b4b4;
Tff7b72var Te6edf3days Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3secondsToFormat Tff7b72/ Tb4b4b4(T79c0ff3600 Tff7b72* T79c0ff24Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72var Te6edf3hours Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3secondsToFormat Tff7b72% Tb4b4b4(T79c0ff3600 Tff7b72* T79c0ff24Tb4b4b4)Tb4b4b4) Tff7b72/ T79c0ff3600Tb4b4b4)Tb4b4b4;
Tff7b72var Te6edf3minutes Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3secondsToFormat Tff7b72% T79c0ff3600Tb4b4b4) Tff7b72/ T79c0ff60Tb4b4b4)Tb4b4b4;
Tff7b72var Te6edf3seconds Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3secondsToFormat Tff7b72% T79c0ff60Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3daysTff7b72: Te6edf3daysTb4b4b4,
Te6edf3hoursTff7b72: Te6edf3hoursTb4b4b4,
Te6edf3minutesTff7b72: Te6edf3minutesTb4b4b4,
Te6edf3secondsTff7b72: Te6edf3secondsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatSecondsWithoutAgoTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3parsedSeconds Tff7b72= Tff7b72thisTb4b4b4.Te6edf3parseSecondsTb4b4b4(Te6edf3secondsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3parsedSecondsTb4b4b4.Te6edf3days Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3parsedSecondsTb4b4b4.Te6edf3days Tff7b72=== T79c0ff1 Tff7b72? Ta5d6ff"1 day" Tff7b72: Te6edf3parsedSecondsTb4b4b4.Te6edf3days Tff7b72+ Ta5d6ff" days"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3parsedSecondsTb4b4b4.Te6edf3hours Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3parsedSecondsTb4b4b4.Te6edf3hours Tff7b72=== T79c0ff1 Tff7b72? Ta5d6ff"1 hour" Tff7b72: Te6edf3parsedSecondsTb4b4b4.Te6edf3hours Tff7b72+ Ta5d6ff" hours"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3parsedSecondsTb4b4b4.Te6edf3minutes Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3parsedSecondsTb4b4b4.Te6edf3minutes Tff7b72=== T79c0ff1 Tff7b72? Ta5d6ff"1 minute" Tff7b72: Te6edf3parsedSecondsTb4b4b4.Te6edf3minutes Tff7b72+ Ta5d6ff" minutes"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3parsedSecondsTb4b4b4.Te6edf3seconds Tff7b72<= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"a second"Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3parsedSecondsTb4b4b4.Te6edf3seconds Tff7b72+ Ta5d6ff" seconds"Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatSecondsTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3formatSecondsWithoutAgoTb4b4b4(Te6edf3secondsTb4b4b4) Tff7b72+ Ta5d6ff" ago"Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatTimeAgoTb4b4b4(Te6edf3datetimeStringTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3datetimeStringTb4b4b4) Tff7b72return Ta5d6ff"unknown"Tb4b4b4;
T8b949e// ensure UTC if no timezone is provided
Tff7b72let Te6edf3dateString Tff7b72= Te6edf3datetimeStringTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3dateString Tff7b72=== Ta5d6ff"string" Tff7b72&& Tff7b72!Te6edf3dateStringTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"Z"Tb4b4b4) Tff7b72&& Tff7b72!Te6edf3dateStringTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"+"Tb4b4b4)Tb4b4b4) Tb4b4b4{
T8b949e// SQLite CURRENT_TIMESTAMP format is YYYY-MM-DD HH:MM:SS
T8b949e// Replace space with T and append Z for ISO format
Te6edf3dateString Tff7b72= Te6edf3dateStringTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff" "Tb4b4b4, Ta5d6ff"T"Tb4b4b4) Tff7b72+ Ta5d6ff"Z"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3date Tff7b72= Tff7b72new Tffa657DateTb4b4b4(Te6edf3dateStringTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3now Tff7b72= Tff7b72new Tffa657DateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3diffMs Tff7b72= Te6edf3nowTb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3dateTb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3diffSec Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3diffMs Tff7b72/ T79c0ff1000Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3diffSec Tff7b72< T79c0ff60Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"just now"Tb4b4b4;
Tb4b4b4}
T8b949e// If older than 24 hours, show full date
Tff7b72if Tb4b4b4(Te6edf3diffSec Tff7b72> T79c0ff86400Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3formatDateTb4b4b4(Te6edf3dateTb4b4b4, Ta5d6ff"MMM D, h:mm A"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3formatSecondsTb4b4b4(Te6edf3diffSecTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Relative age fragment without trailing " ago" / "ago" duplication when used inside i18n
* strings that already add a locale-specific suffix (e.g. "Last synced {time} ago.").
* Sub-minute uses a neutral phrase so English templates avoid "just now ago".
*/
Tff7b72static Te6edf3formatTimeAgoForI18nTb4b4b4(Te6edf3datetimeStringTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3datetimeStringTb4b4b4) Tff7b72return Ta5d6ff"unknown"Tb4b4b4;
Tff7b72let Te6edf3dateString Tff7b72= Te6edf3datetimeStringTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3dateString Tff7b72=== Ta5d6ff"string" Tff7b72&& Tff7b72!Te6edf3dateStringTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"Z"Tb4b4b4) Tff7b72&& Tff7b72!Te6edf3dateStringTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"+"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3dateString Tff7b72= Te6edf3dateStringTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff" "Tb4b4b4, Ta5d6ff"T"Tb4b4b4) Tff7b72+ Ta5d6ff"Z"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3date Tff7b72= Tff7b72new Tffa657DateTb4b4b4(Te6edf3dateStringTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3now Tff7b72= Tff7b72new Tffa657DateTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3diffMs Tff7b72= Te6edf3nowTb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3dateTb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3diffSec Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3diffMs Tff7b72/ T79c0ff1000Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3diffSec Tff7b72< T79c0ff60Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"less than a minute"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3diffSec Tff7b72> T79c0ff86400Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3formatDateTb4b4b4(Te6edf3dateTb4b4b4, Ta5d6ff"MMM D, h:mm A"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3formatSecondsWithoutAgoTb4b4b4(Te6edf3diffSecTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatSecondsAgoTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3secondsAgo Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Te6edf3secondsTb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3formatSecondsTb4b4b4(Te6edf3secondsAgoTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatSecondsAgoForI18nTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3secondsAgo Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4) Tff7b72/ T79c0ff1000 Tff7b72- Te6edf3secondsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3secondsAgo Tff7b72< T79c0ff60Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"less than a minute"Tb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3formatSecondsWithoutAgoTb4b4b4(Te6edf3secondsAgoTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatMinutesSecondsTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3parsedSeconds Tff7b72= Tff7b72thisTb4b4b4.Te6edf3parseSecondsTb4b4b4(Te6edf3secondsTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3paddedMinutes Tff7b72= Te6edf3parsedSecondsTb4b4b4.Te6edf3minutesTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3paddedSeconds Tff7b72= Te6edf3parsedSecondsTb4b4b4.Te6edf3secondsTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tb4b4b4;
Tff7b72return Ta5d6ff`Tffd700${Te6edf3paddedMinutesTffd700}Ta5d6ff:Tffd700${Te6edf3paddedSecondsTffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3convertUnixMillisToLocalDateTimeStringTb4b4b4(Te6edf3unixTimestampInMillisecondsTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3formatDateTb4b4b4(Te6edf3unixTimestampInMillisecondsTb4b4b4, Ta5d6ff"YYYY-MM-DD hh:mm A"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3convertDateTimeToLocalDateTimeStringTb4b4b4(Te6edf3dateTimeTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3convertUnixMillisToLocalDateTimeStringTb4b4b4(Te6edf3dateTimeTb4b4b4.Te6edf3getTimeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3arrayBufferToBase64Tb4b4b4(Te6edf3arrayBufferTb4b4b4) Tb4b4b4{
Tff7b72var Te6edf3binary Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72var Te6edf3bytes Tff7b72= Tff7b72new Tffa657Uint8ArrayTb4b4b4(Te6edf3arrayBufferTb4b4b4)Tb4b4b4;
Tff7b72var Te6edf3len Tff7b72= Te6edf3bytesTb4b4b4.Te6edf3byteLengthTb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72var Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3lenTb4b4b4; Te6edf3iTff7b72++Tb4b4b4) Tb4b4b4{
Te6edf3binary Tff7b72+= Tffa657StringTb4b4b4.Te6edf3fromCharCodeTb4b4b4(Te6edf3bytesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657windowTb4b4b4.Te6edf3btoaTb4b4b4(Te6edf3binaryTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatBitsPerSecondTb4b4b4(Te6edf3bitsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3bits Tff7b72|| Te6edf3bits Tff7b72<= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"0 bps"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3k Tff7b72= T79c0ff1000Tb4b4b4; T8b949e// Use 1000 instead of 1024 for network speeds
Tff7b72const Te6edf3decimals Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3sizes Tff7b72= Tb4b4b4[Ta5d6ff"bps"Tb4b4b4, Ta5d6ff"kbps"Tb4b4b4, Ta5d6ff"Mbps"Tb4b4b4, Ta5d6ff"Gbps"Tb4b4b4, Ta5d6ff"Tbps"Tb4b4b4, Ta5d6ff"Pbps"Tb4b4b4, Ta5d6ff"Ebps"Tb4b4b4, Ta5d6ff"Zbps"Tb4b4b4, Ta5d6ff"Ybps"Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3i Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3bitsTb4b4b4) Tff7b72/ Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657parseFloatTb4b4b4(Tb4b4b4(Te6edf3bits Tff7b72/ Tffa657MathTb4b4b4.Te6edf3powTb4b4b4(Te6edf3kTb4b4b4, Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(Te6edf3decimalsTb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff" " Tff7b72+ Te6edf3sizesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatBytesPerSecondTb4b4b4(Te6edf3bytesPerSecondTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3bytesPerSecond Tff7b72|| Te6edf3bytesPerSecond Tff7b72<= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"0 B/s"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3k Tff7b72= T79c0ff1024Tb4b4b4;
Tff7b72const Te6edf3decimals Tff7b72= T79c0ff1Tb4b4b4;
Tff7b72const Te6edf3sizes Tff7b72= Tb4b4b4[Ta5d6ff"B/s"Tb4b4b4, Ta5d6ff"KB/s"Tb4b4b4, Ta5d6ff"MB/s"Tb4b4b4, Ta5d6ff"GB/s"Tb4b4b4, Ta5d6ff"TB/s"Tb4b4b4, Ta5d6ff"PB/s"Tb4b4b4, Ta5d6ff"EB/s"Tb4b4b4, Ta5d6ff"ZB/s"Tb4b4b4, Ta5d6ff"YB/s"Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3i Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3bytesPerSecondTb4b4b4) Tff7b72/ Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657parseFloatTb4b4b4(Tb4b4b4(Te6edf3bytesPerSecond Tff7b72/ Tffa657MathTb4b4b4.Te6edf3powTb4b4b4(Te6edf3kTb4b4b4, Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(Te6edf3decimalsTb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff" " Tff7b72+ Te6edf3sizesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatCountupDurationTb4b4b4(Te6edf3totalSecondsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3seconds Tff7b72= Tffa657MathTb4b4b4.Te6edf3maxTb4b4b4(T79c0ff0Tb4b4b4, Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657NumberTb4b4b4(Te6edf3totalSecondsTb4b4b4) Tff7b72|| T79c0ff0Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3hours Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3seconds Tff7b72/ T79c0ff3600Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3minutes Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tb4b4b4(Te6edf3seconds Tff7b72% T79c0ff3600Tb4b4b4) Tff7b72/ T79c0ff60Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3remainingSeconds Tff7b72= Te6edf3seconds Tff7b72% T79c0ff60Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hours Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff`Tffd700${Te6edf3hoursTffd700}Ta5d6ff:Tffd700${Tffa657StringTb4b4b4(Te6edf3minutesTb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tffd700}Ta5d6ff:Tffd700${Tffa657StringTb4b4b4(Te6edf3remainingSecondsTb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff`Tffd700${Te6edf3minutesTffd700}Ta5d6ff:Tffd700${Tffa657StringTb4b4b4(Te6edf3remainingSecondsTb4b4b4)Tb4b4b4.Te6edf3padStartTb4b4b4(T79c0ff2Tb4b4b4, Ta5d6ff"0"Tb4b4b4)Tffd700}Ta5d6ff`Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3lxmfMessageTransferTotalBytesTb4b4b4(Te6edf3lxmfMessageTb4b4b4, Te6edf3base64ByteLength Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3lxmfMessageTb4b4b4) Tb4b4b4{
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3decodeBase64Length Tff7b72= Tb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3value Tff7b72|| Tff7b72typeof Te6edf3base64ByteLength Tff7b72!== Ta5d6ff"function"Tb4b4b4) Tb4b4b4{
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3base64ByteLengthTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tff7b72let Te6edf3total Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72const Te6edf3content Tff7b72= Te6edf3lxmfMessageTb4b4b4.Te6edf3content Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3contentTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Tff7b72new Te6edf3TextEncoderTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3encodeTb4b4b4(Te6edf3contentTb4b4b4)Tb4b4b4.Te6edf3lengthTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3fields Tff7b72= Te6edf3lxmfMessageTb4b4b4.Te6edf3fields Tff7b72|| Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3image Tff7b72= Te6edf3fieldsTb4b4b4.Te6edf3imageTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3imageTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3imageTb4b4b4.Te6edf3image_size Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Tffa657NumberTb4b4b4(Te6edf3imageTb4b4b4.Te6edf3image_sizeTb4b4b4) Tff7b72|| T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3imageTb4b4b4.Te6edf3image_bytesTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Te6edf3decodeBase64LengthTb4b4b4(Te6edf3imageTb4b4b4.Te6edf3image_bytesTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3audio Tff7b72= Te6edf3fieldsTb4b4b4.Te6edf3audioTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3audioTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3audioTb4b4b4.Te6edf3audio_size Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Tffa657NumberTb4b4b4(Te6edf3audioTb4b4b4.Te6edf3audio_sizeTb4b4b4) Tff7b72|| T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3audioTb4b4b4.Te6edf3audio_bytesTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Te6edf3decodeBase64LengthTb4b4b4(Te6edf3audioTb4b4b4.Te6edf3audio_bytesTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72const Te6edf3fileAttachments Tff7b72= Te6edf3fieldsTb4b4b4.Te6edf3file_attachmentsTb4b4b4;
Tff7b72if Tb4b4b4(Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3fileAttachmentsTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3file Tff7b72of Te6edf3fileAttachmentsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3fileTff7b72?Tb4b4b4.Te6edf3file_size Tff7b72!= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Tffa657NumberTb4b4b4(Te6edf3fileTb4b4b4.Te6edf3file_sizeTb4b4b4) Tff7b72|| T79c0ff0Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3fileTff7b72?Tb4b4b4.Te6edf3file_bytesTb4b4b4) Tb4b4b4{
Te6edf3total Tff7b72+= Te6edf3decodeBase64LengthTb4b4b4(Te6edf3fileTb4b4b4.Te6edf3file_bytesTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3totalTb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3formatFrequencyTb4b4b4(Te6edf3hzTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3n Tff7b72= Tffa657NumberTb4b4b4(Te6edf3hzTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3nTb4b4b4) Tff7b72|| Te6edf3n Tff7b72<= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"0 Hz"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3k Tff7b72= T79c0ff1000Tb4b4b4;
Tff7b72const Te6edf3rounded Tff7b72= Tffa657MathTb4b4b4.Te6edf3roundTb4b4b4(Te6edf3nTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3sizes Tff7b72= Tb4b4b4[Ta5d6ff"Hz"Tb4b4b4, Ta5d6ff"kHz"Tb4b4b4, Ta5d6ff"MHz"Tb4b4b4, Ta5d6ff"GHz"Tb4b4b4, Ta5d6ff"THz"Tb4b4b4, Ta5d6ff"PHz"Tb4b4b4, Ta5d6ff"EHz"Tb4b4b4, Ta5d6ff"ZHz"Tb4b4b4, Ta5d6ff"YHz"Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3i Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3roundedTb4b4b4) Tff7b72/ Tffa657MathTb4b4b4.Te6edf3logTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657parseFloatTb4b4b4(Tb4b4b4(Te6edf3rounded Tff7b72/ Tffa657MathTb4b4b4.Te6edf3powTb4b4b4(Te6edf3kTb4b4b4, Te6edf3iTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff6Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff" " Tff7b72+ Te6edf3sizesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3decodeBase64ToUtf8StringTb4b4b4(Te6edf3base64Tb4b4b4) Tb4b4b4{
T8b949e// support for decoding base64 as a utf8 string to support emojis and cyrillic characters etc
Tff7b72return Tffa657decodeURIComponentTb4b4b4(
Te6edf3atobTb4b4b4(Te6edf3base64Tb4b4b4)
Tb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff""Tb4b4b4)
Tb4b4b4.Te6edf3mapTb4b4b4(Tff7b72function Tb4b4b4(Te6edf3cTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"%" Tff7b72+ Tb4b4b4(Ta5d6ff"00" Tff7b72+ Te6edf3cTb4b4b4.Te6edf3charCodeAtTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3toStringTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3sliceTb4b4b4(Tff7b72-T79c0ff2Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff""Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3isInterfaceEnabledTb4b4b4(Te6edf3ifaceTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3rawValue Tff7b72= Te6edf3ifaceTb4b4b4.Te6edf3enabled Tff7b72?? Te6edf3ifaceTb4b4b4.Te6edf3interface_enabledTb4b4b4;
Tff7b72const Te6edf3value Tff7b72= Te6edf3rawValueTff7b72?Tb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tff7b72?Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3value Tff7b72=== Ta5d6ff"on" Tff7b72|| Te6edf3value Tff7b72=== Ta5d6ff"yes" Tff7b72|| Te6edf3value Tff7b72=== Ta5d6ff"true"Tb4b4b4;
Tb4b4b4}
Tff7b72static Te6edf3escapeHtmlTb4b4b4(Te6edf3textTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3text Tff7b72== Tff7b72nullTb4b4b4) Tff7b72return Ta5d6ff""Tb4b4b4;
Te6edf3text Tff7b72= Tffa657StringTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3map Tff7b72= Tb4b4b4{
Ta5d6ff"&"Tff7b72: Ta5d6ff"&"Tb4b4b4,
Ta5d6ff"<"Tff7b72: Ta5d6ff"<"Tb4b4b4,
Ta5d6ff">"Tff7b72: Ta5d6ff">"Tb4b4b4,
Ta5d6ff'"'Tff7b72: Ta5d6ff"""Tb4b4b4,
Ta5d6ff"'"Tff7b72: Ta5d6ff"'"Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tff7b72return Te6edf3textTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/[&<>"']/gTb4b4b4, Tff7b72function Tb4b4b4(Te6edf3mTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3mapTb4b4b4[Te6edf3mTb4b4b4]Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Return lowercase hex digits only (strips UUID hyphens, colons, whitespace).
*/
Tff7b72static Te6edf3normalizeMeshchatHashHexTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3value Tff7b72|| Tff7b72typeof Te6edf3value Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tff7b72let Te6edf3h Tff7b72= Te6edf3valueTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"://"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3h Tff7b72= Te6edf3hTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff"://"Tb4b4b4)Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"@"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3h Tff7b72= Te6edf3hTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff"@"Tb4b4b4)Tb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3hTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff":"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3h Tff7b72= Te6edf3hTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff":"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3hTb4b4b4.Te6edf3replaceTb4b4b4(Ta5d6ff/[^0-9a-f]/gTb4b4b4, Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72export Tff7b72default Te6edf3UtilsTb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────